#ifndef COMMONPAGE_H
#define COMMONPAGE_H

#include <QWidget>
#include <QMediaPlaylist>
#include <QMediaPlayer>
#include "musiclist.h"

namespace Ui {
class CommonPage;
}

enum PageType
{
    LIKE_PAGE,    // 我喜欢页面
    LOCAL_PAGE,   // 本地下载页面
    HISTORY_PAGE  // 最近播放页面
};

class CommonPage : public QWidget
{
    Q_OBJECT

public:
    explicit CommonPage(QWidget *parent = nullptr);
    ~CommonPage();

    void setCommonPageTitle(const QString& title);
    void setCommonPageImage(const QPixmap& image);
    void showAddLocalBtn();

    void setPageType(PageType pageType);
    void addMusicToRecentPage(iterator it);
    void addMusic(iterator it, MusicList& musicList, CommonPage* playPage, QMediaPlaylist* playlist);
    void addMusics(QList<QUrl> fileUrls, MusicList& musicList, CommonPage* playPage, QMediaPlaylist* playlist);
    void removeMusic(iterator it, MusicList &musicList, CommonPage* playPage, QMediaPlaylist* playlist);
    int indexInMusicPage(const QUrl &url);
    void setItemIsLike(iterator it);

    // 该方法负责将歌曲信息更新到界面
    void reFresh(MusicList& musicList);

    // 将页面歌曲添加到播放列表中
    void addMusicToPlaylist(QMediaPlaylist* playlist);

    void setStyleByIndex(int index, bool isPlaying, bool onlyAnimal);

    QUrl getMusicUrlByIndex(int index);

    // 读取数据库
    void readFromDB(MusicList& musicList);
    void writeToDB();
signals:
    void addLocalMusic();
    void updateLikeMusic(bool isLike, iterator it);
    void playMusicByPageAndIndex(CommonPage* page, int index);

private slots:
    void on_addLocalBtn_clicked();

private:
    Ui::CommonPage *ui;

    PageType pageType;  // 保存该页面的类别
    QVector<QUrl> musicOfPage;  // 保存pageType对应页面的歌曲url
    QVector<QUrl> musicOfRecentPage;  // RecentPage再多增加一个数组保存
    // 最近播放页面比较特殊，如果正在播放的是别的页面的歌曲，歌曲会被立刻添加进最近播放页面；
    // 但如果正在播放的就是最近播放页面，歌的顺序不会变，直到下次启动程序才会变化；
    // 所以用musicOfPage存本次播放的列表，用musicOfRecentPage存真正的顺序
};

#endif // COMMONPAGE_H
